package 力扣面试经典150;

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2024-04-01
 * Time:20:19
 */

/**
 * 力扣面试经典150:200. 岛屿数量
 * 相关企业
 * 给你一个由 '1'（陆地）和 '0'（水）组成的的二维网格，请你计算网格中岛屿的数量。
 * 岛屿总是被水包围，并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
 * 此外，你可以假设该网格的四条边均被水包围。
 * 示例 1：
 * 输入：grid = [
 *   ["1","1","1","1","0"],
 *   ["1","1","0","1","0"],
 *   ["1","1","0","0","0"],
 *   ["0","0","0","0","0"]
 * ]
 * 输出：1
 */
public class numIslands {
    public int numIslands(char[][] grid) {
        int count = 0;
        for(int i = 0;i < grid.length;i++){
            for(int j = 0;j < grid[0].length;j++){
                if(grid[i][j] == '1'){
                    count++;
                    traveGrid(grid,i,j);
                }
            }
        }
        return count;
    }
    //先将岛屿都标记为 2
    public void traveGrid(char[][] grid,int i,int j){
        if(i >= grid.length || j >= grid[0].length || i < 0 || j < 0)return;
        if(grid[i][j] == '0' || grid[i][j] == '2')return;
        grid[i][j] = '2';
        traveGrid(grid,i + 1,j);
        traveGrid(grid,i - 1,j);
        traveGrid(grid,i,j + 1);
        traveGrid(grid,i,j - 1);

    }
}
